package main

import (
	"fmt"
	"unsafe"
)

/*
int的类型有：int8、		int16、			int32、			int64、				int
占用空间：	1	 		  2   			   4  			   8			可能为4也可能为8
表数范围：-128~127	-2^15~2^15-1	 -2^31~2^31-1	 -2^63~2^63-1		参考int32和int64
其中最后一个类型int根据电脑的操作位数来判断，比如电脑如果是32位的，那么int就会等价于32

uint的类型有：uint8		uint16		uint32			uint64      uint
占用空间：	  1			  2			  4				  8
表数范围：	0~255	  0~2^16-1	   0~2^32-1		   0~2^64-1
uint与int不同的在于int可存储有符号的数值，uint不可存储有符号的值

rune与int32等价，表数范围都是-2^31~2^31-1，所占空间也是4，但是rune表示的是一个Unicode码

byte与uint8等价，表数范围都是0~255，所占空间也是1，但是byte的用途是当我们存储字符时才会使用

需要注意的是，虽然int与uint都分了很多种类型，但他们都不能进行运算操作，原因还是因为他们的类型不同
*/
func main() {
	var a int = 10
	var b uint = 20
	//c := a+b;//a与b一个是int（64）一个是uint，不是同一个类型不能运算
	//var c int8 = 30;
	//d := a+c;//a是int（64）c是int8，他们还是不属于同一类型，不能相加
	var c rune = 30
	var d byte = 40
	//e := 50;//简短声明的话，e的类型默认是int，而int会根据电脑的操作位数自动选择int32和int64
	fmt.Printf("int所占的字节数为%d\n", unsafe.Sizeof(a))
	fmt.Printf("uint所占的字节数为%d\n", unsafe.Sizeof(b)) //int与uint都是8就意味着他们都是64
	fmt.Printf("rune所占的字节数为%d\n", unsafe.Sizeof(c)) //4,证明了rune与int32等价
	fmt.Printf("byte所占的字节数为%d\n", unsafe.Sizeof(d)) //1，证明了byte与uint8等价

}
